<script language=javascript src="../Դ����/eph0.js"></script>
<script language=javascript src="../Դ����/eph.js"></script>
<script language=javascript src="../Դ����/lunar.js"></script>
������������<br>
��ʼ��<input type=text value='1900' id=Cy size=6>
����<input type=text value='30' id=Cn size=6>
����<input type=text value='2' id=Sn size=2>
����<input type=text value='3' id=Gn size=2>
�����<input type=text value='0' id=Qn size=2>
<input type=button onclick='calc()' value='ȷ��'><br><br>
��ű�<br>
00����,01����,02����,03����,04С��,05â��<br>
06����,07С��,08����,09����,10����,11��¶<br>
12���,13��¶,14˪��,15����,16Сѩ,17��ѩ<br>
18����,19С��,20��,21����,22��ˮ,23����<br><br>
�������ڼ�����ѷ���<br>
������϶���ʽ������<br><br>

<div id=out></div>

<script language=javascript>
    function jfcz(a) { //�����Ԫ��˹���ⷽ����,a�����ʾ������(a11,a12,a13,����,b1,  a21,a22,a23,����,b2, a31����)
        var hn = floor((-1 + sqrt(4 * a.length + 1) + 1e-5) / 2); //hn�Ƿ�������
        var i, j, k, hw = hn + 1, len = hn * hw; //hwΪ�п�,len����Ԫ���ܸ���
        var p, pm, c, max; //p,pmԪ�ض�λ��������ʱ����
        var r = new Array();
        for (i = 0; i < len; i++) r[i] = a[i];
        for (i = 0; i < hn; i++) {
            p = i * hw + i; //p����Ԫλ��
            for (j = p, pm = p, max = 0; j < len; j += hw) { //ѡ�����Ԫ,λ����pm
                c = abs(r[j]);
                if (c > max) max = c, pm = j;
            }
            for (j = 0; j < hw - i; j++) c = r[p + j], r[p + j] = r[pm + j], r[pm + j] = c; //�н���
            for (j = i; j < len; j += hw) { //��˹��ȥ��
                if (j == p) continue;  //��ǰ�в�����Ԫ
                c = r[j] / r[p];     //�����ϵ��
                for (k = 0; k < hw - i; k++) r[j + k] -= r[p + k] * c; //�������Ԫ
            }
        }
        for (i = 0; i < hn; i++) r[i] = r[i * hw + hn] / r[i * hw + i]; //���
        r.length = hn;
        return r;
    }
    function dxs_zxec(f, x, n) {//����ʽ���(ʹ����С���˷�),���еĵ���ͬx����ȷ��,f������x�ĺ���,n�Ƕ���ʽ������
        var fc = new Array(), Xk = new Array();
        var i, j, k, p, len = n * (n + 1), xn = x.length;
        for (i = 0; i < len; i++) fc[i] = 0;
        for (k = 0; k < xn; k++) {
            for (i = 1, Xk[0] = 1; i < n; i++) Xk[i] = Xk[i - 1] * x[k]; //���x[k]�ĸ��η�
            for (i = 0; i < n; i++) {
                p = i * (n + 1);
                for (j = 0; j < n; j++) fc[p + j] += Xk[j] * Xk[i];
                fc[p + n] += f[k] * Xk[i];
            }
        }
        return jfcz(fc);
    }

    function dxs(f, x) {
        var i, v = 0, X = 1;
        for (i = 0; i < f.length; i++) v += f[i] * X, X *= x;
        return v;
    }
    function gz(a, n) { //����ʱ��
        var i, b = new Array();
        a = a - Math.floor(a);
        for (i = 0; i < n; i++) {
            a = 1 / a;
            b[i] = Math.floor(a);
            a -= b[i];
        }
        var r = new Array(1, b[n - 1]);
        for (i = n - 2; i >= 0; i--) {
            a = r[1];
            r[1] = a * b[i] + r[0];
            r[0] = a;
        }
        return r;
    }
    function calc() {
        var f = new Array(), x = new Array(), i;
        var n = Cn.value - 0; //���е���(����)
        var y = Cy.value - 0; //��ʼ���
        var q = Qn.value - 0; //�������
        var m = Sn.value - 0;
        var dy = 103;
        var s = '';
        for (i = 0; i < n; i++) {
            f[i] = obb.qi_accurate((y - 2000 + q / 24 + i) * pi2);
            x[i] = i;
            s += JD.JD2str(f[i] + J2000) + '<br>';
        }
        var r = dxs_zxec(f, x, m);
        //�����
        var v1 = 0, v2 = 0, v;
        for (i = 0; i < n; i++) {
            v = Math.abs(dxs(r, x[i]) - f[i]);
            v2 += v * v;
            if (v > v1) v1 = v;
        }
        v2 = Math.sqrt(v2 / (n - 1));
        v1 *= 60 * 24;
        v2 *= 60 * 24;

        var R = gz(r[1], Gn.value - 0);

        out.innerHTML = s
                + '��� a=' + r[0].toFixed(4) + '(J2000������������� UT)<br>'
                + 'б�� b=' + r[1].toFixed(5) + '<br>'
                + '���� ' + R[0] + '/' + R[1] + '����ÿ' + R[1] + '��ӽ�ع�ԭ��ʱ��' + '<br>'
                + '������' + v1.toFixed(2) + '��<br>'
                + '�����' + v2.toFixed(2) + '��<br>'
                + '������������(UT) = a + b*n��ʽ��n�������ʼ��ƫ�Ƶ�����';
    }

</script>
